package com.kaifamiao.strings;

/**
 * 比较字符串内容是否相等
 * 1、equals(Object)
 *      不忽略英文字母大小写
 * 2、contentEquals(CharSequence)
 * 3、equalsIgnoreCase(String)
 *      忽略英文字母大小写
 */
public class CompareString {

    public static void main(String[] args) {

        String x = "开发喵";
        String y = "开发喵";
        String t = new String( "开发喵" );
        String p = new String( new char[]{ '开', '发', '喵'});

        // 使用 == 运算符比较两个值是否相等，比如比较两个变量中存储的值是否相等
        System.out.println( x == y ); // true
        System.out.println( x == t ); // false

        System.out.println( "- ".repeat( 5 ) );

        // 通过 String类 重写后的 equals 比较两个 字符串内容 是否"相等"
        System.out.println( x.equals( t ) ); // true
        System.out.println( x.equals( p ) ); // true

        System.out.println( "- ".repeat( 5 ) );

        // contentEquals( CharSequence cs )
        System.out.println( x.contentEquals( y ) );
        System.out.println( x.contentEquals( t ) );

        System.out.println( "- ".repeat( 5 ) );

        String a = "singleton";
        String b = "SINGLETON";
        // equals 在比较 英文字母时 会考虑大小写问题
        System.out.println( a.equals( b ) ); // false
        // equalsIgnoreCase 在比较英文字母时会忽略大小写问题
        System.out.println( a.equalsIgnoreCase( b ) ); // true

        System.out.println( "- ".repeat( 5 ) );

        String str1 = "儿女";
        String str2 = "农丰";
        // hashCode常规协定三:
        // 若根据equals(Object)比较后两个对象不相等，则不要求它们的hashCode一定不相同
        System.out.println( str1.equals( str2 ) ); // false
        System.out.println( str1.hashCode() );
        System.out.println( str2.hashCode() );

        // 不赞成使用 hashCode 来比较两个字符串是否"相等"
        System.out.println( str1.hashCode() == str2.hashCode() );

    }

}
